/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2022-03-14     desktop       the first version
 */
#include <rtthread.h>
#include <rtdevice.h>

rt_adc_device_t adc_dev;
#define ADC_DEV_NAME "adc1" /* ADC 设 备 名 称 */
#define ADC_DEV_CHANNEL 6 /* ADC 通 道 */
#define REFER_VOLTAGE 330 /* 参 考 电 压 3.3V,数 据 精 度 乘 以100保 留2位 小 数 */

#define CONVERT_BITS (1 << 12) /* 转 换 位 数 为12位 */


static int adc_vol_sample(int argc, char *argv[])
{

    rt_uint32_t value, vol;

    /* 查 找 设 备 */
    adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);
    if (adc_dev == RT_NULL)
    {

        rt_kprintf("adc sample run failed! can't find %s device!\n", ADC_DEV_NAME);
        return RT_ERROR;
    }

    /* 使 能 设 备 */
    rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);

    /* 读 取 采 样 值 */
    value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);

    rt_kprintf("the value is :%d \n", value);

    /* 转 换 为 对 应 电 压 值 */
    vol = value * REFER_VOLTAGE / CONVERT_BITS;
    rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100);

    return RT_EOK;
}

/* 导 出 到 msh 命 令 列 表 中 */
MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample);
